<?php namespace app\wechat\controller;

use houdunwang\route\Controller;
use houdunwang\wechat\WeChat;
use system\model\Keywords;
use system\model\Module;
use system\model\Config;
/**
 * 微信通讯验证
 * Class Api
 * @package app\wechat\controller
 */
class Api extends Controller
{

    public function __construct ()
    {
        //验证微信通讯,在与微信通讯验证之前，需要注意：在中间件中进行Config::set('wechat')，这一步动作
        WeChat::valid();
    }

    //微信绑定url地址，填写的是能访问到该方法的路径
    public function handler ()
    {

        //1.测试回复消息是否正常
        $instance = Wechat::instance( 'message' );
        //在config表中回去字段为wechat_system_response值          //默认回复
        $wechat_system_response= Config::find(1)->wechat_system_response;
        //将其转为数组格式
        $wechat_system_response = json_decode($wechat_system_response,true);
        //扫描二维码关注事件
        if($instance->isSubscribeEvent()){
            //向用户回复消息
            $instance->text($wechat_system_response['welcome']);
        }
        //2.根据粉丝发来的消息内容，在关键词表找对应模块，再模块表中看当前模块是不是系统模块，然后进行实例化微信处理器
        //2.1获取粉丝发送来的消息内容,【关键词】
        $content = $instance->Content;
        $this->parseKeywords($content);


        //获取默认回复的消息内容default_message
        //如果你默认回复消息，恰好是一个关键词，那么当你随便输入的时候，回复该关键词对应的内容
        $this->parseKeywords($wechat_system_response['default_message']);


        //去除默认消息进行恢复给粉丝
        $instance->text($wechat_system_response['default_message']);

    }

    protected function parseKeywords($content)
    {
        //将粉丝发来的消息，原样回复回复，测试
        //$instance->text($content);
        //2.2在关键词表中根据关键词找模块，pluck是获取单一一个字段的值
        //$module = Keywords::where( 'keywords' , $content )->pluck( 'module' );
        //相当于：select name from student
        $module = Keywords::where( 'keywords' , $content )->first();
        if ( $module ) {
            //2.3模块表中查找2.2中的模块是不是系统模块
            $module_is_system = Module::where( 'module_name' , $module['module'] )->pluck( 'module_is_system' );
            //$instance->text($module_is_system);
            //$class = "module\base\system\Processor"
            //$class = "addons\pic\system\Processor";
            //如果 module_is_system==1认为是系统模块 进行微信判断 module
            $class = ( $module_is_system == 1 ? 'module' : 'addons' ) . '\\' . $module['module'] . '\system\Processor';

            return call_user_func_array( [ new $class , 'handler' ] , [$module['module_id']] );
        }
    }
}
